🦊Scheduling Model Weights
🏠 | 🦊雑に学ぶComfyUI
👈 | 🦊Masking Model Weights
👉 |
Stable DIffusion web UIではすでに出来ましたが、サンプリングの途中でckpt/LoRAモデルのstrengthを変更できるようになりました
cf. LoRa Control - Dynamic Weights Controller
以前はKSamplerAdvancedノードを複数並べる必要がありましたが、これで簡単(当社比)になりましたね
とても詳しい解説
Masking and Scheduling LoRA and Model Weights
基本形
https://gyazo.com/18aa1d216f7355562434b36d1d69010f
Scheduling Model Weights_basic.json
https://gyazo.com/f62fd199b9b6ca23b1b0c87a64b538b3
Create Hook Keyframeノード
strength_mult
Create Hook LoRAノードで読み込んだLoRAの強度にこの値を掛けた値が適用されます
start_percent (0.0 ~ 1.0)
どのタイミングのサンプリングステップでこの設定を適用するか設定します
この画像の場合
1つ目のCreate Hook Keyframeがstrength_mult = 0/start_percent = 0
2つ目のCreate Hook Keyframeがstrength_mult = 0.5/start_percent = 0.8
KSamplerのspeps = 20
なので、LoRAは0 ~ 10ステップはstrength = 0、 11 ~ 20ステップはstrength = 0.64 (Create Hook LoRA : 0.8 * Create Hook Keyframe : 0.8)で適用される
LoRAではなくckptモデルを使う
Create Hook Model as LoRAノードを使うことで、LoRAではなく、ckptモデルを読み込むことができます
この場合、🦊モデルのマージと同じ動作をすることになります
https://gyazo.com/5d1be0ac86e6feec6272ac5f8dc96011
Scheduling Model Weights_model.json
計算式
$ base_model*(1-strength) + target*strength
つまり🟥設定したモデルの強さを0にすれば、元のモデルのみの推論
強さを1にした場合は、設定したモデルのみの推論になります
https://gyazo.com/6a7133bc7bc5cc9b0aad142982315342
step数20の場合
0 ~ 10ステップはベースモデルのみ
11 ~ 20ステップはベースモデル 20% / Create Hook Model as LoRAノードで設定したモデル 80%で推論
滑らかに値を変化させる
https://gyazo.com/d10dc0709b6e96d46f3c500e1a916a1a
Scheduling Model Weights_Interp.json
https://gyazo.com/866a2c7553dc5ef43d6c558e9406e26f
🟨Create Hook Keyframes Interp.ノード
イージングを使って値を変化させます
strength_start / end
interp ( linear / ease_in / ease_out / ease_in_out )
イージングのタイプを設定
start / end_percent (0.0 ~ 1.0)
keyframes_count
何分割して適用するか
print_keyframes
これをtrueにすると、ログに計算された適用される値が表示されます
https://gyazo.com/991399707eab4e0bb62db5f78a19d10a
グラフで見ないと想像つきにくいかもしれない
https://gyazo.com/17c03e17148e3e4c853b70c0326a610e
🚨これを5分割するので、このグラフのように滑らかではなく、階段状になる
複数のHooKを組み合わせる
https://gyazo.com/67a7d8cdaa1043fd90f0214f238d9286
Scheduling Model Weights_Combine.json
Combine Hooks (2)ノード(4個8個版combineもある)を使うことで複数のLoRAのスケジューリングを組み合わせることが出来ます
https://gyazo.com/71bdfa65b22a11a8371f47a483d2a096
どこで使うか?
KSamplerAdvancedノード#659f1ddae2dacc000089d5b1やConcept Sliders#655f82e2e2dacc0000a65ceaのように、LoRAを途中から効かせることで、元のモデルの性能を邪魔せずいいとこどりできます
絵柄LoRAや年齢を変化させるLoRAに有効